package main

import "fmt"

/*
go语言中的接口不需要显示声明，只需要实现该接口下的全部方法即为实现来该接口
interface默认为引用类型
 */
type interface_USB interface {
	Name() string
	Connect()
	//嵌套接口
	interface_connect
}

type interface_connect interface {
	Use()
}

type interface_A struct {
	Same string
}

func (a interface_A) Name()string{
	return a.Same
}

func (a interface_A)Connect(){
	fmt.Println("let's go")
}

func (a interface_A)Use(){
	fmt.Println("USE")
}

func main() {
	var a interface_USB
	//interface_A即实现来接口 interface_USB
	a = interface_A{
		Same:"hello",
	}
	fmt.Println(a.Name())
	a.Connect()
	a.Use()
	interface_disconnect(a)
}

func interface_disconnect(usb interface_USB){
	//如果想要输出接口对应实现类的属性，需要使用类型判断
	if a, ok := usb.(interface_A); ok{
		fmt.Println("disconnect : ", a.Same)
	}
	fmt.Println("unknow")
}